import matplotlib.pyplot as plt
%matplotlib inline
from train import *
Using TensorFlow backend.
##### Define hyperparameters
size_row = 128
size_col = 128
latent_dim = 100
dir_name = r'./data_sketch'
epochs = 8192
save_interval = 2048
batch_size = 32
##### Get training dataset and generator
x_feature, generator = train(size_col, size_row,
latent_dim,
dir_name,
epochs,
save_interval,
batch_size,
print_process = False) # True if want to observe the process of the model training
==============================
===== Preparing dataset for training model ...
==============================
==============================
===== Dataset has been prepared!
==============================
==============================
===== Training the model ...
==============================
===== Generator =====
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 100) 0
__________________________________________________________________________________________________
dense_1 (Dense) (None, 16384) 1654784 input_1[0][0]
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 128, 128, 1) 0
__________________________________________________________________________________________________
reshape_1 (Reshape) (None, 128, 128, 1) 0 dense_1[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 128, 128, 2) 0 reshape_1[0][0]
input_2[0][0]
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 128, 128, 64) 2112 concatenate_1[0][0]
__________________________________________________________________________________________________
leaky_re_lu_1 (LeakyReLU) (None, 128, 128, 64) 0 conv2d_1[0][0]
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, 128, 128, 64) 256 leaky_re_lu_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 64, 64, 128) 131200 batch_normalization_1[0][0]
__________________________________________________________________________________________________
leaky_re_lu_2 (LeakyReLU) (None, 64, 64, 128) 0 conv2d_2[0][0]
__________________________________________________________________________________________________
batch_normalization_2 (BatchNor (None, 64, 64, 128) 512 leaky_re_lu_2[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 32, 32, 256) 524544 batch_normalization_2[0][0]
__________________________________________________________________________________________________
leaky_re_lu_3 (LeakyReLU) (None, 32, 32, 256) 0 conv2d_3[0][0]
__________________________________________________________________________________________________
batch_normalization_3 (BatchNor (None, 32, 32, 256) 1024 leaky_re_lu_3[0][0]
__________________________________________________________________________________________________
conv2d_4 (Conv2D) (None, 16, 16, 512) 524800 batch_normalization_3[0][0]
__________________________________________________________________________________________________
leaky_re_lu_4 (LeakyReLU) (None, 16, 16, 512) 0 conv2d_4[0][0]
__________________________________________________________________________________________________
batch_normalization_4 (BatchNor (None, 16, 16, 512) 2048 leaky_re_lu_4[0][0]
__________________________________________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 1024) 525312 batch_normalization_4[0][0]
__________________________________________________________________________________________________
leaky_re_lu_5 (LeakyReLU) (None, 8, 8, 1024) 0 conv2d_5[0][0]
__________________________________________________________________________________________________
batch_normalization_5 (BatchNor (None, 8, 8, 1024) 4096 leaky_re_lu_5[0][0]
__________________________________________________________________________________________________
conv2d_6 (Conv2D) (None, 4, 4, 1024) 1049600 batch_normalization_5[0][0]
__________________________________________________________________________________________________
leaky_re_lu_6 (LeakyReLU) (None, 4, 4, 1024) 0 conv2d_6[0][0]
__________________________________________________________________________________________________
conv2d_transpose_1 (Conv2DTrans (None, 8, 8, 512) 524800 leaky_re_lu_6[0][0]
__________________________________________________________________________________________________
leaky_re_lu_7 (LeakyReLU) (None, 8, 8, 512) 0 conv2d_transpose_1[0][0]
__________________________________________________________________________________________________
batch_normalization_6 (BatchNor (None, 8, 8, 512) 2048 leaky_re_lu_7[0][0]
__________________________________________________________________________________________________
concatenate_2 (Concatenate) (None, 8, 8, 1536) 0 batch_normalization_6[0][0]
batch_normalization_5[0][0]
__________________________________________________________________________________________________
conv2d_transpose_2 (Conv2DTrans (None, 16, 16, 256) 1573120 concatenate_2[0][0]
__________________________________________________________________________________________________
leaky_re_lu_8 (LeakyReLU) (None, 16, 16, 256) 0 conv2d_transpose_2[0][0]
__________________________________________________________________________________________________
batch_normalization_7 (BatchNor (None, 16, 16, 256) 1024 leaky_re_lu_8[0][0]
__________________________________________________________________________________________________
concatenate_3 (Concatenate) (None, 16, 16, 768) 0 batch_normalization_7[0][0]
batch_normalization_4[0][0]
__________________________________________________________________________________________________
conv2d_transpose_3 (Conv2DTrans (None, 32, 32, 128) 1572992 concatenate_3[0][0]
__________________________________________________________________________________________________
leaky_re_lu_9 (LeakyReLU) (None, 32, 32, 128) 0 conv2d_transpose_3[0][0]
__________________________________________________________________________________________________
batch_normalization_8 (BatchNor (None, 32, 32, 128) 512 leaky_re_lu_9[0][0]
__________________________________________________________________________________________________
concatenate_4 (Concatenate) (None, 32, 32, 384) 0 batch_normalization_8[0][0]
batch_normalization_3[0][0]
__________________________________________________________________________________________________
conv2d_transpose_4 (Conv2DTrans (None, 64, 64, 64) 393280 concatenate_4[0][0]
__________________________________________________________________________________________________
leaky_re_lu_10 (LeakyReLU) (None, 64, 64, 64) 0 conv2d_transpose_4[0][0]
__________________________________________________________________________________________________
batch_normalization_9 (BatchNor (None, 64, 64, 64) 256 leaky_re_lu_10[0][0]
__________________________________________________________________________________________________
concatenate_5 (Concatenate) (None, 64, 64, 192) 0 batch_normalization_9[0][0]
batch_normalization_2[0][0]
__________________________________________________________________________________________________
conv2d_transpose_5 (Conv2DTrans (None, 128, 128, 32) 98336 concatenate_5[0][0]
__________________________________________________________________________________________________
leaky_re_lu_11 (LeakyReLU) (None, 128, 128, 32) 0 conv2d_transpose_5[0][0]
__________________________________________________________________________________________________
batch_normalization_10 (BatchNo (None, 128, 128, 32) 128 leaky_re_lu_11[0][0]
__________________________________________________________________________________________________
concatenate_6 (Concatenate) (None, 128, 128, 96) 0 batch_normalization_10[0][0]
batch_normalization_1[0][0]
__________________________________________________________________________________________________
conv2d_transpose_6 (Conv2DTrans (None, 128, 128, 32) 49184 concatenate_6[0][0]
__________________________________________________________________________________________________
leaky_re_lu_12 (LeakyReLU) (None, 128, 128, 32) 0 conv2d_transpose_6[0][0]
__________________________________________________________________________________________________
batch_normalization_11 (BatchNo (None, 128, 128, 32) 128 leaky_re_lu_12[0][0]
__________________________________________________________________________________________________
conv2d_7 (Conv2D) (None, 128, 128, 2) 1026 batch_normalization_11[0][0]
__________________________________________________________________________________________________
concatenate_7 (Concatenate) (None, 128, 128, 3) 0 input_2[0][0]
conv2d_7[0][0]
==================================================================================================
Total params: 8,637,122
Trainable params: 8,631,106
Non-trainable params: 6,016
__________________________________________________________________________________________________
===== Discriminator =====
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) (None, 128, 128, 3) 0
_________________________________________________________________
conv2d_8 (Conv2D) (None, 64, 64, 16) 784
_________________________________________________________________
leaky_re_lu_13 (LeakyReLU) (None, 64, 64, 16) 0
_________________________________________________________________
batch_normalization_12 (Batc (None, 64, 64, 16) 64
_________________________________________________________________
dropout_1 (Dropout) (None, 64, 64, 16) 0
_________________________________________________________________
conv2d_9 (Conv2D) (None, 32, 32, 32) 8224
_________________________________________________________________
leaky_re_lu_14 (LeakyReLU) (None, 32, 32, 32) 0
_________________________________________________________________
batch_normalization_13 (Batc (None, 32, 32, 32) 128
_________________________________________________________________
dropout_2 (Dropout) (None, 32, 32, 32) 0
_________________________________________________________________
conv2d_10 (Conv2D) (None, 16, 16, 64) 32832
_________________________________________________________________
leaky_re_lu_15 (LeakyReLU) (None, 16, 16, 64) 0
_________________________________________________________________
batch_normalization_14 (Batc (None, 16, 16, 64) 256
_________________________________________________________________
dropout_3 (Dropout) (None, 16, 16, 64) 0
_________________________________________________________________
conv2d_11 (Conv2D) (None, 16, 16, 128) 131200
_________________________________________________________________
leaky_re_lu_16 (LeakyReLU) (None, 16, 16, 128) 0
_________________________________________________________________
batch_normalization_15 (Batc (None, 16, 16, 128) 512
_________________________________________________________________
dropout_4 (Dropout) (None, 16, 16, 128) 0
_________________________________________________________________
conv2d_12 (Conv2D) (None, 16, 16, 256) 524544
_________________________________________________________________
leaky_re_lu_17 (LeakyReLU) (None, 16, 16, 256) 0
_________________________________________________________________
batch_normalization_16 (Batc (None, 16, 16, 256) 1024
_________________________________________________________________
dropout_5 (Dropout) (None, 16, 16, 256) 0
_________________________________________________________________
conv2d_13 (Conv2D) (None, 16, 16, 512) 2097664
_________________________________________________________________
leaky_re_lu_18 (LeakyReLU) (None, 16, 16, 512) 0
_________________________________________________________________
batch_normalization_17 (Batc (None, 16, 16, 512) 2048
_________________________________________________________________
dropout_6 (Dropout) (None, 16, 16, 512) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 131072) 0
_________________________________________________________________
dense_2 (Dense) (None, 1) 131073
=================================================================
Total params: 2,930,353
Trainable params: 2,928,337
Non-trainable params: 2,016
_________________________________________________________________
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/training.py:490: UserWarning: Discrepancy between trainable weights and collected trainable weights, did you set `model.trainable` without calling `model.compile` after ? 'Discrepancy between trainable weights and collected trainable'
0 [D loss: 1.905250] [G loss: 1.174201]
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 134 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 530 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 269 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 342 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 263 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 465 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 308 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 292 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 98 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 996 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 640 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 1131 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 194 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 258 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 122 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 268 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 272 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 168 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 72 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 95 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 751 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 228 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 436 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 207 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
2048 [D loss: 1.155493] [G loss: 2.883713]
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 2 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 1 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 3 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
4096 [D loss: 0.482588] [G loss: 4.344023]
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 5 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 9 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 18 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 13 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 15 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 4 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 2166 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 78 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 46 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 65 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 29 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
/home/dabsdamoon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/skimage/color/colorconv.py:993: UserWarning: Color data out of range: Z < 0 in 32 pixels
warn('Color data out of range: Z < 0 in %s pixels' % invalid[0].size)
6144 [D loss: 0.545659] [G loss: 2.794542]
============================== ===== Training has been completed! ============================== ============================== ===== Visualization! ==============================
image_valid = plt.imread('asakura.png') # insert name of directory where validation image is located
image_valid = cv2.resize(image_valid, (size_row, size_col))
show_image(image_valid)
img_gray = rgb2gray(image_valid).reshape(size_row, size_col, 1)
img_gray3 = np.concatenate([img_gray]*3, axis = 2) # concatenating three gray images so that it can have 3 channels
show_image(img_gray3)
img_lab3 = rgb2lab(img_gray3) # convert concatenated image to lab
valid_input = img_lab3[:,:,0].reshape(1, size_row, size_col, 1)/128
valid_noise = np.random.normal(0, 1, (1, latent_dim))
r, c = 5, 5
valid_noise = custom_noise(interval = 1)
valid_input_concat = np.concatenate([valid_input]*(r*c), axis = 0)
gen_imgs = generator.predict([valid_noise, valid_input_concat])
# generate image
image_col = []
i = 0
for col_num in range(c):
image_row = []
for row_num in range(r):
image_indiv_ab = gen_imgs[i,:,:,1:].reshape(size_row, size_col,2)
image_indiv = np.concatenate([img_lab3[:,:,:1]/128, image_indiv_ab], axis = 2)
image_row.append(image_indiv.astype('float64'))
i += 1
image_row = np.concatenate(image_row)
image_col.append(image_row)
plt.figure(figsize = (12,12))
plt.axis('off')
plt.imshow(lab2rgb(np.concatenate(image_col, axis = 1)*128))
plt.show()
image_valid = plt.imread('taylor.png') # insert name of directory where validation image is located
image_valid = cv2.resize(image_valid, (size_row, size_col))
show_image(image_valid)
img_gray = rgb2gray(image_valid).reshape(size_row, size_col, 1)
img_gray3 = np.concatenate([img_gray]*3, axis = 2) # concatenating three gray images so that it can have 3 channels
show_image(img_gray3)
img_lab3 = rgb2lab(img_gray3) # convert concatenated image to lab
valid_input = img_lab3[:,:,0].reshape(1, size_row, size_col, 1)/128
valid_noise = np.random.normal(0, 1, (1, latent_dim))
r, c = 5, 5
valid_noise = custom_noise(interval = 1)
valid_input_concat = np.concatenate([valid_input]*(r*c), axis = 0)
gen_imgs = generator.predict([valid_noise, valid_input_concat])
# generate image
image_col = []
i = 0
for col_num in range(c):
image_row = []
for row_num in range(r):
image_indiv_ab = gen_imgs[i,:,:,1:].reshape(size_row, size_col,2)
image_indiv = np.concatenate([img_lab3[:,:,:1]/128, image_indiv_ab], axis = 2)
image_row.append(image_indiv.astype('float64'))
i += 1
image_row = np.concatenate(image_row)
image_col.append(image_row)
plt.figure(figsize = (12,12))
plt.axis('off')
plt.imshow(lab2rgb(np.concatenate(image_col, axis = 1)*128))
plt.show()